home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <dos.h>
- #define CTRLC_CHECK 0x33 /* CtrlC Check Interrupt */
- #define CTRLC_INTERRUPT 0x23 /* CtrlC Handler */
-
- static void (interrupt far *BasicRtn)(); /* save ctrl/c routine address */
-
- static void interrupt far CtrlCAbort(void) { /* Ctrl C Comes Here */
-
- extern pascal far B$CEND(); /* basic end routine */
- extern pascal far B$CENP(); /* basic end routine */
-
- char *msg = "Program Aborted..\n";
-
- write(1, msg, strlen(msg)); /* tell about abort */
- B$CEND(); /* call basic finish up */
- B$CENP(); /* call basic end */
-
- }
-
- static void pascal far CtrlCTrap (void) {
-
- _disable(); /* turn of interrupts */
- _dos_setvect(CTRLC_INTERRUPT, BasicRtn); /* restore old Ctrl/C */
- _enable(); /* turn on interrupts */
-
- };
-
- /*************************************************************************
- Function:SetCtrlC
- Purpose :Setup Trap on CTRL/C key and abort
- Inputs :None
- Outputs :None
- Results :Restores Default CTRL/C Interrupt
- **************************************************************************/
-
- void pascal far SetCtrlC (void) {
-
- extern pascal far B_OnExit(); /* address of basic exit */
- union REGS r; /* registers for call */
-
- _disable(); /* turn of interrupts */
- BasicRtn = _dos_getvect(CTRLC_INTERRUPT); /* save old intr address */
- _dos_setvect(CTRLC_INTERRUPT, CtrlCAbort); /* set new interrupt */
- B_OnExit(CtrlCTrap); /* tell basic about exit rtn */
- _enable(); /* turn on interrupts */
- r.h.ah = CTRLC_CHECK; /* ctrl-c check interrupt */
- r.h.al = r.h.dl = 0x01; /* set function */
- intdos(&r, &r); /* perform dos call */
- }
-